#ifndef COLORPLOT_H
#define COLORPLOT_H

#include <QColor>
#include <qwt_scale_engine.h>
#include <qsettings.h>
#include <qfiledialog.h>

/**
 * @brief The ColorPlot class               Класс для назначения цвета кривых и фона
 */
class ColorPlot
{
public:
//    ColorPlot(const QColor firstColor = QColor(0,0,0));
    explicit ColorPlot(int theme = 0);
    ~ColorPlot();
    /**
     * @brief getColorCurve                 Получение цвета для кривой по индексу
     * @param index                         Индекс кривой
     * @return                              Возвращает цвет
     */
    QColor getCurveColor(int index);
    /**
     * @brief print                         Вывод цвета кривой в Rgb и Hsv в консоль
     * @param index                         Индекс кривой
     */
    void print(int index);
    /**
     * @brief getBackgroundColor            Получение цвета фона
     * @return
     */
    QColor getBackgroundColor() const;
    /**
     * @brief getGridColor                  Получить цвет для сетки
     * @return
     */
    QColor getGridColor() const;
    /**
     * @brief setBackgroundColor            Назначить цвет для фона
     * @param a                             Цвет
     */
    void setBackgroundColor( QColor a = QColor(0,0,0));
    /**
     * @brief setCurveColor                 Назначить цвет для конкретной кривой, без пересчёта
     * @param color                         Цвет
     * @param index                         Номер кривой
     */
    void setCurveColor(const QColor color, const int index);
    /**
     * @brief updateColors                  Обновить цвета под определённую тему
     * @param them                          Номер темы
     */
    void updateColors(int them);

    /**
     * @brief d_ini                         ini файл
     */
    QSettings *d_ini;
    /**
     * @brief getGroup                      получить группу для цвета
     * @param row                           номер строки
     * @param column                        номер столбца
     * @return                              название группы
     */
    QString getGroup(int row, int column);
    /**
     * @brief setColor                      по группе назначить цвет
     * @param group                         название группы
     * @return                              цвет
     */
    QColor setColor(QString group);
private:
    /**
     * @brief d_baseColors                  Массив из базовых цветов
     */
    QColor d_baseColors[4];
    /**
     * @brief d_complColors                 Массив из вспомогательных цветов
     */
    QColor d_complColors[4];
    /**
     * @brief d_backgroundColor             Цвет фона
     */
    QColor d_backgroundColor;
    /**
     * @brief d_gridColor                   Цвет сетки
     */
    QColor d_gridColor;
    /**
     * @brief s_complColor                  Насыщенность вспомогательного цвета
     */
    int s_complColor = 0;
    /**
     * @brief setBaseColors                 Поиск основных цветов по одному входному
     * @param color                         Входной цвет
     */
    void setBaseColors(QColor color);
    /**
     * @brief setComplColors                Поиск вспомогательных цветов по одному входному
     * @param color                         Входной цвет
     */
    void setComplColors(QColor color);
    /**
     * @brief setBackgroundColor            Назначить цвет для фона
     * @param saturation                    Насыщенность цвета первой кривой
     * @param value                         Яркость первой кривой
     */
    void setBackgroundColor(int saturation = 255, int value = 255);
    /**
     * @brief searchSaturation              Определение уровня насыщенности для вспомогательных кривых и сетки
     * @param s                             Насыщенность цвета первой кривой
     */
    void searchSaturation(int s );

    /**
     * @brief The Saturation enum           Градация шкалы насыщенности цвета
     */
    enum Saturation{
        s_white = 0,
        s_light = 81,
        s_dark = 162,
        s_black = 255};

    /**
     * @brief stepCurve                     Шаг для смены цвета кривой
     */
    const int stepCurve = 81;
    /**
     * @brief stepGrid                      Шаг для смены цвета сетки
     */
    const int stepGrid = 40;
    /**
     * @brief firstColor                    Цвет первой кривой
     */
    QColor firstColor;



};

#endif // COLORPLOT_H
